package com.jt.controller;

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//类中的方法返回的数据都是JSON
@RestController      //@Controller + @ResponseBody
@RequestMapping("/user") //定义公共的前缀
public class UserController {

    /**
     * 类型: get请求
     * 返回值: String id:name
     * 补课:
     *  1.Servlet-request对象/response对象
     *  2.Servlet中如何取值??
     * URL:http://localhost:8080/user/findUser?id=100&name=tomcat
     */
    @RequestMapping("/findUser")
    public String findUser(HttpServletRequest request,
                           HttpServletResponse response){
        String id = request.getParameter("id");
        int intId = Integer.parseInt(id);
        String name = request.getParameter("name");
        return intId +":"+name;
    }

    /**
     * URL:http://localhost:8080/user/findUser2?id=100&name=tomcat
     * 规则: SpringMVC中的参数名称,必须与传递参数名称一致
     * 原理: SpringMVC在内部将Servlet的取值的方式包装.用户只需填写参数
     *      即可以获取数据.
     * @return
     */
    @RequestMapping("/findUser2")
    public String findUser2(Integer id,String name){

        return id +":"+name;
    }

    /**
     * url:http://localhost:8080/user/getUser?id=1&name=李四&age=18
     * 返回值: User对象
     * 知识点:
     *   1.当遇到多个参数时,可以使用对象封装.
     *   2.要求: 对象的属性必须与参数名称一致,同时必须有Set/Get方法.
     *          SpringMVC会自动的将参数赋值给对象的属性.
     */
    @RequestMapping("/getUser")
    public User getUser(User user){
        return user;
    }

    /**
     * RestFul结构 动态接收参数
     * url: http://localhost:8080/user/restFul/1/张三
     * 返回值: 返回User对象
     * 难点: 需要从URL的路径中获取参数!!!
     * 语法:
     *  1.服务器端参数接收时,变量使用{xx}进行包裹,并且位置固定.
     *  2.利用@PathVariable注解,动态获取路径中的数据,要求名称必须匹配
     */
    @RequestMapping("/restFul/{id}/{name}")
    public User restFul(@PathVariable Integer id,
                        @PathVariable String name){
        User user = new User();
        user.setId(id);
        user.setName(name);
        return user;
    }

    /**
     * URL: http://localhost:8080/user/restFul2/1/王五/18
     * RestFul对象接收:
     *   如果对象的属性与{key}相同,则可以使用对象接收.
     * 用途: restFul结构 一般用于更新操作
     * @param user
     * @return
     */
  /*  @RequestMapping(value = "/restFul2/{id}/{name}/{age}",
    method = RequestMethod.GET)*/
    @GetMapping("/restFul2/{id}/{name}/{age}")
    public User restFul2(User user){

        return user;
    }


}
